#include <iostream>
#include <vector>
#include <cstring>
using namespace std;

const int N=1e6+10;

int son[N*30][2],idx;
int mx[N],mi[N];
void insert(int num)
{
	int p=0;
	for(int i=30;i>=0;i--)
	{
		int t=num>>i&1;
		if(!son[p][t])
			son[p][t]=++idx;
		p=son[p][t];
	}
}

int query1(int num)
{
	int p=0;
	int ret=0;
	for(int i=30;i>=0;i--)
	{
		int t=num>>i&1;
		if(son[p][!t])
		{
			ret^=1<<i;
			p=son[p][!t];
		}
		else{
			p=son[p][t];
		}
	}
	return ret;
}
int query2(int num)
{
	int p=0;
	int ret=0;
	for(int i=30;i>=0;i--)
	{
		int t=num>>i&1;
		if(son[p][t])
		{
			p=son[p][t];
		}
		else{
			ret|=1<<i;
			p=son[p][!t];
		}
	}
	return ret;
}
int main()
{
	int n;
	cin>>n;
	vector<int> a;
	a.push_back(0);
	for(int i=1;i<=n;i++)
	{
		int num;
		cin>>num;
		a.push_back(num);
	}
	
	insert(0);
	int sum=0;
	mi[0]=1e9;
	for(int i=1;i<=n;i++)
	{
		sum^=a[i];
		mx[i]=max(mx[i-1],query1(sum));
		mi[i]=min(mi[i-1],query2(sum));
		insert(sum);
	}	
	
	sum=0;
	memset(son,0,sizeof(son));
	idx=0;
	int smx=0,smi=2e9;
	insert(0);
	
	int ret=0;
	for(int i=n;i>0;i--)
	{
		sum^=a[i];
		smx=max(smx,query1(sum));
		smi=min(smi,query2(sum));
		ret=max(ret,max(mx[i-1]-smi,smx-mi[i-1]));
		insert(sum);
	}
	cout<<ret<<endl;
	return 0;
}
